---
title: 软件架构概述
description: 软件架构的基本概念、作用与发展历程
date: 2024-06-01
sidebar_position: 1
---


## 概述

<RedSpan>软件架构</RedSpan>是从<RedSpan>需求分析到软件设计之间的过渡过程</RedSpan>，只要架构设计好，整个软件就不会出现坍塌性的错误。

- <RedSpan>架构设计就是需求分配，将满足需求的职责分配到组件上。</RedSpan>
- 软件架构为系统提供了<RedSpan>结构、行为和属性的高级抽象</RedSpan>，由构件的描述、构件的相互作用（<RedSpan>连接件</RedSpan>）、指导构件集成的模式以及这些模式的约束组成。
- 软件架构不仅<RedSpan>规定了系统的组织结构和拓扑结构</RedSpan>，还<RedSpan>显示了系统需求和构件之间的对应关系</RedSpan>，提供了设计决策的基本原理。
- <RedSpan>解决好软件的复用、质量和维护问题，是研究软件架构的根本目的。</RedSpan>

### 软件架构设计的核心要点

- 包括<RedSpan>提出架构模型、产生架构设计、进行设计评审</RedSpan>等活动，是一个迭代的过程。
- 架构设计主要关注<RedSpan>软件组件的结构、属性和交互作用</RedSpan>，并通过多种视图全面描述系统的架构。
- 架构能在设计变更相对容易的阶段，<RedSpan>为技术人员与非技术人员就软件设计进行交流</RedSpan>，能展现软件结构、属性与内部交互关系。
- 架构是<RedSpan>项目干系人进行交流的手段</RedSpan>，明确了对系统实现的约束条件，决定了开发和维护组织的结构，制约系统质量属性。
- 架构<RedSpan>使推理和控制的更改更加简单</RedSpan>，有助于原型设计和培训。
- 架构是<RedSpan>可传递和可复用的模型</RedSpan>，通过研究架构可预测软件质量。

## 软件架构设计与生命周期

软件架构设计贯穿于软件开发的各个阶段，每个阶段关注点不同，整体流程可总结为"需设实组部后"。

### 需求分析阶段
- 关注对象：<RedSpan>问题空间</RedSpan>（需求本身）与<RedSpan>解空间</RedSpan>（架构方案）。
- 重点：<RedSpan>如何根据需求模型构建SA模型，如何保证模型转换的可追踪性</RedSpan>。

### 设计阶段
- 这是<RedSpan>SA研究关注最早和最多的阶段</RedSpan>。
- 主要内容：
  - <RedSpan>SA模型的描述</RedSpan>（如构件、连接子等基本概念）
  - <RedSpan>SA模型的设计与分析方法</RedSpan>
  - <RedSpan>SA设计经验的总结与复用</RedSpan>
- 研究层次：基本概念、体系结构描述语言（ADL）、多视图表示。

### 实现阶段
- 关注<RedSpan>SA设计向实现的转换</RedSpan>。
- 主要内容：
  - <RedSpan>开发过程支持</RedSpan>（如项目组织、配置管理）
  - <RedSpan>模型映射与组装</RedSpan>（如将设计语言元素引入SA阶段、复用中间件平台）
  - <RedSpan>基于SA的测试技术</RedSpan>

### 构件组装阶段
- 目标：<RedSpan>高效组装可复用构件，实现系统蓝图</RedSpan>。
- 关注点：
  - <RedSpan>支持构件互联</RedSpan>（连接子实现）
  - <RedSpan>检测并消除体系结构失配</RedSpan>（如接口、连接子、全局假设冲突等）

### 部署阶段
- 作用：
  - <RedSpan>提供高层体系结构视图</RedSpan>，描述软硬件模型
  - <RedSpan>分析部署方案的质量属性</RedSpan>，选择合理部署方案

### 后开发阶段
- 关注：<RedSpan>维护、演化、复用</RedSpan>等。
- 研究方向：
  - <RedSpan>动态软件体系结构</RedSpan>（运行时结构变化、重配置）
  - <RedSpan>体系结构恢复与重建</RedSpan>（如手工重建、工具支持、数据挖掘等）

---

> **记忆口诀：需设实组部后**（需求、设计、实现、组装、部署、后开发）

每个阶段都有其独特的关注点和方法，掌握各阶段的核心任务和常见问题，有助于系统性理解软件架构设计全流程。

## 构件

<RedSpan>构件</RedSpan>是软件架构的核心单元，理解其本质、特性和相关技术是考试与实际开发的重点。

### 构件的定义与本质
- 构件是一个<RedSpan>独立可交付的功能单元</RedSpan>，外界通过接口访问其服务。
- 构件通常由一组需要同时部署的<RedSpan>原子构件</RedSpan>组成。
- <RedSpan>原子构件</RedSpan>是<RedSpan>一个模块和一组资源</RedSpan>的组合，是<RedSpan>部署、版本控制和替换的基本单位</RedSpan>。
- <RedSpan>大多数原子构件永远不会被单独部署</RedSpan>，而是作为构件家族成组部署。
- <RedSpan>模块</RedSpan>是不带资源的原子构件，通常为一组类、过程或函数等。
- <RedSpan>资源</RedSpan>是指原子构件运行所需的配置、数据文件等辅助内容。

### 构件与对象的区别
- 构件：<RedSpan>独立部署单元</RedSpan>，可包含多个类元素，但一个类元素只能属于一个构件。
- 对象：<RedSpan>实例单元</RedSpan>，有唯一标识，可能具有外部可见状态，封装状态和行为。

### 构件的特性
1. <RedSpan>独立部署单元</RedSpan>
2. <RedSpan>作为第三方的组装单元</RedSpan>
3. <RedSpan>没有（外部的）可见状态</RedSpan>

### 构件接口
- 接口标准化关注<RedSpan>消息的格式、模式和协议</RedSpan>的标准化，强调输入输出消息的规范。

### 面向构件的编程（COP）
- 关注<RedSpan>如何支持建立面向构件的解决方案</RedSpan>。
- 需要支持：
  - 多态性（可替代性）
  - 模块封装性（高层次信息隐藏）
  - 后期绑定与装载（部署独立性）
  - 安全性（类型和模块安全性）

### 主流构件技术
- <RedSpan>EJB</RedSpan>（Java）：三类——会话Bean、实体Bean、消息驱动Bean，适合企业级应用。
- <RedSpan>COM/DCOM/COM+</RedSpan>（微软）：支持分布式、位置无关，COM+为更高层次发展。
- <RedSpan>CORBA</RedSpan>（OMG）：三层——对象请求代理、公共对象服务、公共设施，强调分布式对象互操作。

---

> **记忆要点**：
> - 构件=独立部署+无外部状态+可组装
> - 构件接口=消息标准化
> - COP=多态+封装+后期绑定+安全
> - 技术流派：EJB、COM、CORBA
